From f7d4a2772bba0851f4703679ddf5390092e8f01c Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 12 Dec 2013 16:09:34 -0500 Subject: [PATCH] Add a header bar example to gtk-demo This is basically standalone the testtitlebar example, turned into a demo. --- demos/gtk-demo/Makefile.am | 1 + demos/gtk-demo/demo.gresource.xml | 1 + demos/gtk-demo/headerbar.c | 71 +++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 demos/gtk-demo/headerbar.c diff --git a/demos/gtk-demo/Makefile.am b/demos/gtk-demo/Makefile.am index 49a9a70319..97bc571b56 100644 --- a/demos/gtk-demo/Makefile.am +++ b/demos/gtk-demo/Makefile.am @@ -24,6 +24,7 @@ demos = \ entry_completion.c \ event_axes.c \ expander.c \ + headerbar.c \ hypertext.c \ iconview.c \ iconview_edit.c \ diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml index 19c582bb81..d8efe4f0bf 100644 --- a/demos/gtk-demo/demo.gresource.xml +++ b/demos/gtk-demo/demo.gresource.xml @@ -94,6 +94,7 @@ event_axes.c expander.c flowbox.c + headerbar.c hypertext.c iconview.c iconview_edit.c diff --git a/demos/gtk-demo/headerbar.c b/demos/gtk-demo/headerbar.c new file mode 100644 index 0000000000..c6dcbb451d --- /dev/null +++ b/demos/gtk-demo/headerbar.c @@ -0,0 +1,71 @@ +/* Header Bar + * + * GtkHeaderBar is a container that is suitable for implementing + * window titlebars. One of its features is that it can position + * a title (and optional subtitle) centered with regard to the + * full width, regardless of variable-width content at the left + * or right. + * + * It is commonly used with gtk_window_set_titlebar() + */ + +#include + +GtkWidget * +do_headerbar (GtkWidget *do_widget) +{ + static GtkWidget *window = NULL; + GtkWidget *header; + GtkWidget *button; + GtkWidget *box; + GtkWidget *image; + GIcon *icon; + + if (!window) + { + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget)); + g_signal_connect (window, "destroy", + G_CALLBACK (gtk_widget_destroyed), &window); + gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); + + header = gtk_header_bar_new (); + gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header), TRUE); + gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Welcome to Facebook - Log in, sign up or learn more"); + gtk_header_bar_set_has_subtitle (GTK_HEADER_BAR (header), FALSE); + + button = gtk_button_new (); + icon = g_themed_icon_new ("mail-send-receive-symbolic"); + image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_BUTTON); + g_object_unref (icon); + gtk_container_add (GTK_CONTAINER (button), image); + gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button); + + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_style_context_add_class (gtk_widget_get_style_context (box), "linked"); + button = gtk_button_new (); + gtk_container_add (GTK_CONTAINER (button), gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE)); + gtk_container_add (GTK_CONTAINER (box), button); + button = gtk_button_new (); + gtk_container_add (GTK_CONTAINER (button), gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE)); + gtk_container_add (GTK_CONTAINER (box), button); + + gtk_header_bar_pack_start (GTK_HEADER_BAR (header), box); + + gtk_window_set_titlebar (GTK_WINDOW (window), header); + + gtk_container_add (GTK_CONTAINER (window), gtk_text_view_new ()); + } + + if (!gtk_widget_get_visible (window)) + { + gtk_widget_show_all (window); + } + else + { + gtk_widget_destroy (window); + window = NULL; + } + + return window; +} -- 2.30.2